import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 导入数据
data = pd.read_excel('第二章 图表(前15).xlsx', sheet_name='9 对比柱形图', usecols='B:E', skiprows=1)

# 设置图形大小
plt.figure(figsize=(10, 6))

# 定义柱状图的宽度
bar_width = 0.35

# 计算每个商品的索引位置
index = range(len(data['商品']))

# 绘制2021年销量柱状图
plt.bar(index, data['2021销量'], bar_width, label='2021年销量', alpha=0.7)

# 绘制2022年销量柱状图
plt.bar([i + bar_width for i in index], data['2022销量'], bar_width, label='2022年销量', alpha=0.7)

# 添加数值标签
for i, v in enumerate(data['2021销量']):
    plt.text(i, v + 10, str(v), ha='center', va='bottom', fontsize=10)

for i, v in enumerate(data['2022销量']):
    plt.text(i + bar_width, v + 10, str(v), ha='center', va='top', fontsize=10)

# 计算2022年销量与2021年销量的差值
differences = data['2021销量'] - data['2022销量']

# 在2022年销量柱子上绘制向上的箭头，并输出差值
for i, diff in enumerate(differences):
    if diff > 0:
        plt.annotate(f'{diff}',
                     xy=(i + bar_width, data['2021销量'][i]),  # 箭头的终点位置
                     xytext=(i + bar_width, data['2022销量'][i] + 100),  # 注释文本的位置
                     textcoords='data',
                     arrowprops=dict(arrowstyle="<-", color='red'),
                     ha='center', va='bottom', fontsize=10)

# 添加标题和标签
plt.title('2021年与2022年销量对比')
plt.xlabel('商品')
plt.ylabel('销量')

# 设置x轴刻度和标签
plt.xticks([i + bar_width / 2 for i in index], data['商品'])

# 显示图例
plt.legend()

# 导出图片
#plt.savefig('D:/python charm/01/可视化/第二章/图片/对比柱形图.png', dpi=300, bbox_inches='tight')

# 显示图形
plt.show()